﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Capa_Negocio_Interface;
using Capa_Negocio_Facade;
using Capa_Entidad;
using System.Data;
public partial class Ventas_wfAtencion : System.Web.UI.Page
{
    IFacadeRegistrarAtencion objFacadeAtencion = new FacadeRegistrarAtencion();
    private static String valorOperacion = "C";
    private List<V_Medico_Especialidad> listaMedicos = null;
    private List<GEN_ESPECIALIDAD> listaEspecialidad = null;
    private List<ATE_ATENCION> listaAtencion = null;
    private List<GEN_SERVICIO> listaServicio = null;
    private static String msg, titulo;
    private static Boolean ok = false;
    private static List<ATE_ATENCION_RECETA> listaReceta = new List<ATE_ATENCION_RECETA>();
    private static List<CYF_PRODUCTO> listaproducto = new List<CYF_PRODUCTO>();
    private static IFacadeRegistrarHistoriaClinica InterfaceRegistrarHistoriaClinica;
    private static IEnumerable<Object> ListarDiagnosticos = null;
    private static IEnumerable<Object> ListarExamenes = null;
    private static IEnumerable<Object> ListarHospitalizaciones = null;
    private static IEnumerable<Object> ListarMedicamentos = null;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {

            listaReceta = new List<ATE_ATENCION_RECETA>();
            cboTipoDeServicio.DataSource = objFacadeAtencion.ListarTipoServicio();
            cboTipoDeServicio.DataBind();
            cargarPopupBusquedaPaciente();
            cargarPopupProductos();
            EstructuraDetalleProducto();
            listaproducto.Clear();
            listarCitas();
            Session["IdCita"] = "";
            if (Session["Ate_Operacion"] == null)
            {
                Response.Redirect("wfAtencionListado.aspx");
                return;
            }
            if (Session["Ate_Operacion"].ToString() == "M") //MODIFICAR
            {

                valorOperacion = "M";
                int idAtencion = (Int32)Session["IdAtencion"];
                Mostrar_Atencion(idAtencion);
                btnhistorial.Visible = true;

            }
            else if (Session["Ate_Operacion"].ToString() == "C")   //REGISTRAR
            {
                valorOperacion = "C";
                limpiarCampos();
                String atributo = "display";
                String valorAttr = "none";
                btnhistorial.Visible = false;
                linkEnfermedadActual.Attributes.CssStyle.Add(atributo, valorAttr);
                linkHistoriaPersonal.Attributes.CssStyle.Add(atributo, valorAttr);
                linkHistoriaSocial.Attributes.CssStyle.Add(atributo, valorAttr);
                linkExamenEspecialidad.Attributes.CssStyle.Add(atributo, valorAttr);
                linkExamenActividad.Attributes.CssStyle.Add(atributo, valorAttr);
                linkDiagnostico.Attributes.CssStyle.Add(atributo, valorAttr);

                ScriptManager.RegisterStartupScript(this, typeof(Page), "pkcitas", "pccitas.Show()", true);
            }
            else
            {
                return;
            }

        }
        else {
            listarCitas();
        }


    }

    public void listarCitas() {
        gvcitas.DataSource = objFacadeAtencion.ListarCitasPendientes();
        gvcitas.DataBind();
    
    }
    public void EstructuraDetalleProducto() {
        DataTable dtprod = new DataTable();
        dtprod.Columns.Add(new DataColumn("ATR_NRO_RECETA", typeof(string)));
        dtprod.Columns.Add(new DataColumn("PRO_ID_PRODUCTO", typeof(int)));
        dtprod.Columns.Add(new DataColumn("PRO_DES_PRODUCTO", typeof(string)));
        Session["dtproddet"] = dtprod;

    }
    public void cargarPopupBusquedaPaciente()
    {
        gvBuscarPaciente.DataSource = objFacadeAtencion.listarPaciente();
        gvBuscarPaciente.DataBind();

    }
    public void cargarPopupProductos() {
        gvproductos.DataSource = objFacadeAtencion.ListarProductos();
        gvproductos.DataBind();
    }

    protected void BuscarPaciente(object sender, EventArgs e)
    {

    }
    protected void btnAceptarAtencion_Click(object sender, EventArgs e)
    {
        //---Codigo antiguo
        //if (Session["Ate_Operacion2"].ToString() == "P")
        //{
        //    return;
        //}
        if (Session["Ate_Operacion"]=="P" || Session["Ate_Operacion"]==null)
        {
            return;
        }

        Grabar();

    }
    public void carga_ItemsReceta()
    {
        gvListaRecetas.AutoGenerateColumns = false;
        gvListaRecetas.DataSource = listaReceta;
        gvListaRecetas.DataBind();
    }
    public void cargar_Producto() {
        gvprod.AutoGenerateColumns = false;
        gvprod.DataSource = listaproducto;
        gvprod.DataBind();
    }
    IFacadeRegistrarHistoriaClinica objFacadeHistorial;
    public void Grabar()
    {
        try
        {

            objFacadeHistorial = new FacadeRegistrarHistoriaClinica();
            if (validarInsercion() == true)
            {
                ATE_ATENCION nuevaAtencion = new ATE_ATENCION();


                nuevaAtencion.ATE_FECHA_INGRESO = dEFechaIngresoAtencion.Date;
                nuevaAtencion.ATE_FECHA_EGRESO = dEFechaEgresoAtencion.Date;
                nuevaAtencion.ATE_FECHA_EGRESO_ADMINISTRATIVO = dEFechaEgresoAdministrativoAtencion.Date;
                nuevaAtencion.ATE_DESCRIPCION = txtDescripcionAtencion.Text;


                nuevaAtencion.ATE_FLAG_INFECCIONES_INTRAHOSPITALES = radiobInfeccionesIntrahosp.Checked ? true : false;
                nuevaAtencion.ATE_FLAG_NECROPSIA = radiobNecropcia.Checked ? true : false;

                String codigoPaciente = txtCodPaciente.Text;
                List<ADM_PACIENTE> paciente = objFacadeAtencion.listarPaciente(codigoPaciente);
                nuevaAtencion.PAC_ID_PACIENTE = paciente[0].PAC_ID_PACIENTE;

                nuevaAtencion.ESP_ID_ESPECIALIDAD_MEDICO = Convert.ToInt32(cboEspecialidad.Value);
                nuevaAtencion.SER_ID_SERVICIO_INGRESO = Convert.ToInt32(cboServicio.Value);
                nuevaAtencion.MED_ID_MEDICO_INGRESO = Convert.ToInt32(cboMedico.Value);
                nuevaAtencion.MED_ID_MEDICO_ATENCION = Convert.ToInt32(cboMedico.Value);
                if (txtidcita.Text.Trim() == string.Empty)
                {
                    nuevaAtencion.CIT_ID_CITA = null;
                }
                else
                {
                    nuevaAtencion.CIT_ID_CITA = Convert.ToInt16(txtidcita.Text);
                }
                int idAtencion = 0;

                if (valorOperacion == "C")
                {
                    ATE_ATENCION ultimaAtencion = new ATE_ATENCION();
                    ultimaAtencion = objFacadeAtencion.obtenerUltimaAtencion();
                    
                    int nuevoId=0;
                    if (ultimaAtencion == null)
                    {
                        nuevoId = 1;
                    }
                    else {
                        idAtencion = objFacadeAtencion.obtenerUltimaAtencion().ATE_ID_ATENCION;
                        nuevoId=idAtencion+1;
                    }
                    
                    nuevaAtencion.ATE_ID_ATENCION = nuevoId;
                    if (objFacadeAtencion.InsertarAtencion(nuevaAtencion) == true)
                    {

                       
                        List<HIS_HISTORIA_CLINICA> historial = objFacadeHistorial.ListarHistorialPaciente(paciente[0].PAC_ID_PACIENTE);
                        

                        //VW_DETALLE_HISTORIA_CLINICA DetalleHistorial = new VW_DETALLE_HISTORIA_CLINICA();
                        //DetalleHistorial.ATE_ID_ATENCION = nuevoId;
                        int idHistorial=0;
                        idHistorial = Convert.ToInt16(historial[0].HC_ID_HISTORIA_CLINICA);
                        //DetalleHistorial.HC_ID_HISTORIA_CLINICA = Convert.ToInt16(historial[0].PAC_ID_PACIENTE);
                        if (objFacadeHistorial.InsertarDetalle(nuevoId,idHistorial) == true)
                        {
                        
                        }


                        foreach (ATE_ATENCION_RECETA row in listaReceta)
                        {
                            ATE_ATENCION_RECETA ultimaReceta = new ATE_ATENCION_RECETA();
                            int nuevoIdReceta = 0;
                            ultimaReceta = objFacadeAtencion.obtenerUltimaReceta();
                            if (ultimaReceta == null)
                            {
                                nuevoIdReceta = 1;
                            }
                            else {
                                nuevoIdReceta = (objFacadeAtencion.obtenerUltimaReceta().ATR_ID_RECETA) + 1;
                            }
                            row.ATR_ID_RECETA = nuevoIdReceta;
                            row.ATE_ID_ATENCION = nuevoId;
                            row.MED_ID_MEDICO = Convert.ToInt32(cboMedico.Value);
                            row.SER_ID_SERVICIO = Convert.ToInt32(cboServicio.Value);
                            objFacadeAtencion.InsertarReceta(row);
                            for (int i = 0; i < gvdetalleprod.VisibleRowCount;i++ )
                            {
                                if (row.ATR_NRO_RECETA.ToString().Trim() == gvdetalleprod.GetRowValues(i, "ATR_NRO_RECETA").ToString().Trim())
                                {
                                    int ultimoIdDetalle = 0;
                                    ultimoIdDetalle = objFacadeAtencion.ObtenerIdUltimoReceta();
                                    ATE_DETALLE_RECETA detalleReceta = new ATE_DETALLE_RECETA();
                                    detalleReceta.DER_ID_DETALLE = ultimoIdDetalle;
                                    detalleReceta.ATR_ID_RECETA = nuevoIdReceta;
                                    detalleReceta.PRO_ID_PRODUCTO = Convert.ToInt16(gvdetalleprod.GetRowValues(i, "PRO_ID_PRODUCTO").ToString());
                                    if (objFacadeAtencion.InsertarDetalleReceta(detalleReceta))
                                    {
                                    
                                    }
                                }
                            }
                        }
                        
                        gvprod.DataSource = null;
                        gvprod.DataBind();
                        Session["dtproddet"] = null;
                        listaproducto.Clear();

                        msg = "Nueva Atención Agregada";
                        ok = true;
                        Redirecionar(msg, ok);

                    }
                    else
                    {

                        titulo = "Mensaje";
                        msg = "Error: No se pudo registrar la Atención";
                        MostrarComentario(msg, titulo);
                    }
                }
                else if (valorOperacion == "M")
                {
                    idAtencion = Convert.ToInt32(txtIdAtencion.Text);
                    nuevaAtencion.ATE_ID_ATENCION = idAtencion;
                    if (objFacadeAtencion.modificarAtencion(nuevaAtencion) == true)
                    {
                        if(txtidcita .Text .Trim ()!=""){
                            objFacadeAtencion.ActualizarEstadoCita(Convert.ToInt16(txtidcita.Text), 3);
                        }
                        titulo = "Mensaje";
                        msg = "Atención Modificada";
                        ok = true;
                        Redirecionar(msg, ok);
                    }
                    else
                    {

                        titulo = "Mensaje";
                        msg = "Error: No se pudo Modificar la Atencion";
                        MostrarComentario(msg, titulo);
                    }
                }
                else { return; }

            }
        }
        catch (Exception ex)
        {
            titulo = "ERROR AL GRABAR LA ATENCIÓN";
            msg = ex.Message;
            MostrarComentario(msg, titulo);
        }
    }
    public void limpiarCampos()
    {

        txtIdAtencion.Text = string.Empty;
        txtCodPaciente.Text = string.Empty;
        dEFechaIngresoAtencion.Date = DateTime.Now;
        dEFechaEgresoAtencion.Date = DateTime.Now;
        dEFechaEgresoAdministrativoAtencion.Date = DateTime.Now;
        txtDescripcionAtencion.Text = string.Empty;
        txtCodPaciente.Text = string.Empty;
        cboEspecialidad.DataSource = null;
        cboServicio.DataSource = null;
        cboMedico.DataSource = null;

    }
    private bool validarInsercion()
    {
        bool Bool = true;

        if (dEFechaIngresoAtencion.Value == null)
        {
            Bool = false;

            msg = "Debe proporcionar una fecha de Ingreso de Atención";
        }
        else if (dEFechaEgresoAtencion.Value == null)
        {
            Bool = false;

            msg = "Debe proporcionar una fecha de Egreso de Atención";
        }
        else if (dEFechaEgresoAdministrativoAtencion.Value == null)
        {
            Bool = false;

            msg = "Debe proporcionar una fecha de egreso administrativo";
        }
        else if (cboMedico.Value == null)
        {
            Bool = false;

            msg = "Debe Seleccionar un Medico";
        }
        else if (radiobInfeccionesIntrahosp.Checked == false && radiobNecropcia.Checked == false)
        {
            Bool = false;
            msg = "Debe seleccionar una de los radios.";
        }
        else if (txtCodPaciente.Value == null)
        {
            Bool = false;
            msg = "Debe seleccionar un paciente.";
        }
        else if (cboEspecialidad.Value == null)
        {
            Bool = false;
            msg = "Debe seleccionar una especialidad.";
        }
        else if (cboServicio.Value == null)
        {
            Bool = false;
            msg = "Debe seleccionar un servicio.";
        }
        else if (cboMedico.Value == null)
        {
            Bool = false;
            msg = "Debe seleccionar un médico.";
        }
        if (Bool == false)
        {
            titulo = "Mensaje";
            MostrarComentario(msg, titulo);
        }
        return Bool;
    }


    protected void btnCancelarAtencion_Click(object sender, EventArgs e)
    {
        Session["Ate_Operacion"] = null;
        Session["ContenidoMsj"] = null;
        Response.Redirect("wfAtencionListado.aspx", true);
    }
    void Mostrar_Atencion(Int32 IdAtencion)
    {
        try
        {
            listaAtencion = new List<ATE_ATENCION>();
            listaAtencion = objFacadeAtencion.obtenerDatosAtencion(IdAtencion);
            int cant = listaAtencion.Count();
            if (cant <= 0)
            {
                ok = false;
                msg = "No Hay Datos para Cita Seleccionada";
                Redirecionar(msg, ok);
                return;
            }
            String  nombrePaciente = "";
            string codPaciente;
            int idMedico, idServicio, idEspecialidad, idTipoServicio;

            foreach (var S in listaAtencion)
            {
                int idAtencion = S.ATE_ID_ATENCION;
                txtIdAtencion.Text = idAtencion.ToString();
                dEFechaIngresoAtencion.Value = S.ATE_FECHA_INGRESO;
                dEFechaEgresoAtencion.Value = S.ATE_FECHA_EGRESO;
                dEFechaEgresoAdministrativoAtencion.Value = S.ATE_FECHA_EGRESO_ADMINISTRATIVO;
                txtDescripcionAtencion.Text = S.ATE_DESCRIPCION;
                bool? pInfeccionesIntraHosp = S.ATE_FLAG_INFECCIONES_INTRAHOSPITALES;

                idTipoServicio = S.GEN_SERVICIO.TIS_ID_TIPO.Value;
                idMedico = S.MED_ID_MEDICO_ATENCION.Value;
                idEspecialidad = S.ESP_ID_ESPECIALIDAD_MEDICO.Value;
                idServicio = S.SER_ID_SERVICIO_INGRESO.Value;
                codPaciente =S.ADM_PACIENTE.PAC_CODIGO_PACIENTE.ToString();
                nombrePaciente = String.Format("{0} {1}, {2}", S.ADM_PACIENTE.PAC_APELLIDO_PATERNO, S.ADM_PACIENTE.PAC_APELLIDO_MATERNO, S.ADM_PACIENTE.PAC_NOMBRES);
                if (pInfeccionesIntraHosp == true)
                {
                    radiobInfeccionesIntrahosp.Checked = true;
                }
                else
                {
                    radiobNecropcia.Checked = true;
                }

                Session["CodPaciente"] = S.PAC_ID_PACIENTE.Value.ToString();

                txtCodPaciente.Text = codPaciente;
                txtNombrePaciente.Text = nombrePaciente;


                cboTipoDeServicio.Value = idTipoServicio.ToString();
                Carga_Especialidad(idTipoServicio);
                cboEspecialidad.Value = idEspecialidad.ToString();
                Carga_Medico(idEspecialidad);
                cboMedico.Value = idMedico.ToString();
                Carga_Servicio(idEspecialidad);
                cboServicio.Value = idServicio.ToString();


                if (S.ATE_FLAG_INFECCIONES_INTRAHOSPITALES == true)
                {
                    radiobInfeccionesIntrahosp.Checked = true;
                    radiobNecropcia.Checked = false;
                }
                else
                {
                    radiobInfeccionesIntrahosp.Checked = false;
                    radiobNecropcia.Checked = true;
                }
                List<V_LISTA_CITAS> lista = new List<V_LISTA_CITAS>();
                lista = objFacadeAtencion.ListaCitaAtencion(idAtencion);
                if(lista .Count >0){
                    txtidcita.Text = lista[0].CIT_ID_CITA.ToString ();
                    Session["IdCita"] = txtidcita.Text.Trim();
                    txtfeccita.Text = lista[0].CIT_FECHA.ToString();
                    txthorcita.Text = lista[0].HOR_HORARIO.ToString();
                    txtestado.Text = lista[0].ESC_DESCRIPCION;
                    txtobs.Text = lista[0].CIT_OBSERVACION.ToString ();
                }
                listaReceta = objFacadeAtencion.listarRecetasPorCodAtencion(S.ATE_ID_ATENCION);
                gvListaRecetas.DataSource = objFacadeAtencion.listarRecetasPorCodAtencion(idAtencion);
                gvListaRecetas.DataBind();

                gvdetalleprod.DataSource = objFacadeAtencion.listarDetalleRecetaPorCodAtencion(idAtencion);
                gvdetalleprod.DataBind();
            }
        }
        catch (Exception ex)
        {
            titulo = "ERROR AL LISTAR ATENCIÓN";
            msg = ex.Message;
            MostrarComentario(msg, titulo);
        }

    }


    private void MostrarComentario(String msg, String titulo)
    {
        pcMensaje.HeaderText = titulo;
        lblMensaje.Text = msg;
        ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcMensaje.Show();", true);
    }

    protected void cboEspecialidad_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            int idEspecialidad = Convert.ToInt16(cboEspecialidad.SelectedItem.Value);
            Carga_Medico(idEspecialidad);
            Carga_Servicio(idEspecialidad);

        }
        catch (Exception ex)
        {
            titulo = "ERROR";
            msg = ex.Message;
            MostrarComentario(msg, titulo);
        }
    }
    private void Carga_Servicio(int? id)
    {
        try
        {
            listaServicio = new List<GEN_SERVICIO>();
            listaServicio = objFacadeAtencion.listarServicioXEspecialidad(id);
            cboServicio.DataSource = listaServicio;
            cboServicio.ValueField = "SER_ID_SERVICIO";
            cboServicio.TextField = "SER_NOMBRE";
            cboServicio.DataBind();
        }
        catch (Exception ex)
        {
            titulo = "ERROR AL CARGAR LOS MEDICOS";
            msg = ex.Message;
            MostrarComentario(msg, titulo);
        }

    }
    private void Carga_Especialidad(int? idTipoServicio)
    {
        try
        {
            listaEspecialidad = new List<GEN_ESPECIALIDAD>();
            listaEspecialidad = objFacadeAtencion.listarEspecialidadPorTipoServicio(idTipoServicio);
            cboEspecialidad.DataSource = listaEspecialidad;
            cboEspecialidad.ValueField = "ESP_ID_ESPECIALIDAD";
            cboEspecialidad.TextField = "ESP_NOMBRE";
            cboEspecialidad.DataBind();
        }
        catch (Exception ex)
        {
            titulo = "ERROR AL CARGAR LA ESPECIALIDAD";
            msg = ex.Message;
            MostrarComentario(msg, titulo);
        }
    }
    private void Carga_Medico(int? IdEspecialidad)
    {
        try
        {
            listaMedicos = new List<V_Medico_Especialidad>();
            listaMedicos = objFacadeAtencion.listarMedicoXEspecialidad(IdEspecialidad);
            cboMedico.DataSource = listaMedicos;
            cboMedico.ValueField = "MED_ID_MEDICO";
            cboMedico.TextField = "Nombre";
            cboMedico.DataBind();
        }
        catch (Exception ex)
        {
            titulo = "ERROR AL CARGAR LOS MEDICOS";
            msg = ex.Message;
            MostrarComentario(msg, titulo);
        }
    }
    public void agregarRecetaALista(DateTime fechaReceta, String nroReceta)
    {
        ATE_ATENCION_RECETA nuevaReceta = new ATE_ATENCION_RECETA();
        nuevaReceta.ATR_FECHA = fechaReceta;
        nuevaReceta.ATR_NRO_RECETA = nroReceta;
        listaReceta.Add(nuevaReceta);
    }

    public void agregarProducto(int idProd,string nomProd) {
        CYF_PRODUCTO nuevoProducto = new CYF_PRODUCTO();
        nuevoProducto.PRO_ID_PRODUCTO = idProd;
        nuevoProducto.PRO_DES_PRODUCTO = nomProd;
        listaproducto.Add(nuevoProducto);
    }

    protected void btnAgregarReceta_Click(object sender, EventArgs e)
    {
        if (dEFechaRecetaAtencion.Value != null && txtNroRecetaAtencion.Value != null)
        {

            DateTime fechaReceta = dEFechaRecetaAtencion.Date;
            String nroReceta = txtNroRecetaAtencion.Text;
            agregarRecetaALista(fechaReceta, nroReceta);
            carga_ItemsReceta();

            if (Session["dtproddet"]==null) {
                EstructuraDetalleProducto();
            }
            DataTable dt = Session["dtproddet"] as DataTable;
            DataRow dr;
          

            for(int i=0;i<gvprod.VisibleRowCount;i++){
                dr = dt.NewRow();
            dr[0] = txtNroRecetaAtencion.Text.Trim();
            dr[1] = Convert.ToInt16(gvprod.GetRowValues(i, "PRO_ID_PRODUCTO").ToString());
            dr[2] = gvprod.GetRowValues(i, "PRO_DES_PRODUCTO").ToString();
            dt.Rows.Add(dr);
           
            }
            gvdetalleprod.DataSource = dt;
            gvdetalleprod.DataBind();

            gvprod.DataSource = null;
            gvprod.DataBind();
            listaproducto.Clear();
 dEFechaRecetaAtencion.Date = new DateTime();
            txtNroRecetaAtencion.Text = "";

        }
        else
        {
            titulo = "ERROR AL AGREGAR RECETA";
            msg = "Debe completar los datos para ingresar una receta.";
            MostrarComentario(msg, titulo);

        }
    }
    protected void cboTipoDeServicio_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            int selectedIndex = Convert.ToInt32(cboTipoDeServicio.Value);
            cboEspecialidad.DataSource = objFacadeAtencion.listarEspecialidadPorTipoServicio(selectedIndex);
            cboEspecialidad.DataBind();
        }
        catch (Exception)
        {
            MostrarComentario("No se pudo lista. Ha ocurrido algun error.", "LISTAR ESPECIALIDAD");
        }
    }
    private void Redirecionar(String msg, Boolean ok)
    {
        Session["Ate_Operacion"] = null;
        Session["msg"] = msg;
        Session["ContenidoMsj"] = ok;
        Response.Redirect("wfAtencionListado.aspx", false);
    }
    protected void btnAceptarBuscarPaciente_Click(object sender, EventArgs e)
    {
        try
        {
            String codPaciente = gvBuscarPaciente.GetRowValues(gvBuscarPaciente.FocusedRowIndex, "PAC_CODIGO_PACIENTE").ToString();
            String apellidoMaternoPaciente = gvBuscarPaciente.GetRowValues(gvBuscarPaciente.FocusedRowIndex, "PAC_APELLIDO_MATERNO").ToString();
            String apellidoPaternoPaciente = gvBuscarPaciente.GetRowValues(gvBuscarPaciente.FocusedRowIndex, "PAC_APELLIDO_PATERNO").ToString();
            String nombrePaciente = gvBuscarPaciente.GetRowValues(gvBuscarPaciente.FocusedRowIndex, "PAC_NOMBRES").ToString();

            txtNombrePaciente.Text = String.Format("{0} {1}, {2}", apellidoPaternoPaciente, apellidoMaternoPaciente, nombrePaciente);
            txtCodPaciente.Text = codPaciente;

        }
        catch (Exception ex)
        {
            titulo = "ERROR AL AGREGAR PACIENTE";
            msg = ex.Message;
            MostrarComentario(msg, titulo);
        }
    }

    protected void gvBuscarPaciente_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
    {
        cargarPopupBusquedaPaciente();
    }
    protected void gvBuscarPaciente_PageIndexChanged(object sender, EventArgs e)
    {
        cargarPopupBusquedaPaciente();
    }

    protected void btnbusprod_Click(object sender, EventArgs e)
    {

    }
    protected void btnBuscarPaciente_Click(object sender, EventArgs e)
    {

    }
    protected void gvproductos_PageIndexChanged(object sender, EventArgs e)
    {
        cargarPopupProductos();
    }
    protected void gvproductos_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
    {
        cargarPopupProductos();
    }
    protected void btnaceptarprod_Click(object sender, EventArgs e)
    {
        string codProducto = gvproductos.GetRowValues(gvproductos.FocusedRowIndex, "PRO_ID_PRODUCTO").ToString();
        string NomProducto = gvproductos.GetRowValues(gvproductos.FocusedRowIndex, "PRO_DES_PRODUCTO").ToString();
        txtnroprod.Text = codProducto;
        txtdescripprod.Text = NomProducto;
    }
    protected void btnagrprod_Click(object sender, EventArgs e)
    {
        if(txtnroprod.Text.Trim()!="" && txtdescripprod.Text.Trim()!="" ){

            for (int i = 0; i < listaproducto.Count(); i++)
            {
                if(listaproducto[i].PRO_ID_PRODUCTO.ToString()==txtnroprod.Text){
                    titulo = "ERROR AL AGREGAR PRODUCTO";
                    msg = "Producto ya existente en la receta medica.";
                    MostrarComentario(msg, titulo);
                    txtnroprod.Text = "";
                    txtdescripprod.Text = "";
                    return;
                }
            }

         agregarProducto(Convert.ToInt16( txtnroprod.Text),txtdescripprod.Text);
         cargar_Producto();
         txtnroprod.Text = "";
         txtdescripprod.Text = "";

        } 
        else
        {
            titulo = "ERROR AL AGREGAR PRODUCTO";
            msg = "Debe completar los datos para ingresar un producto.";
            MostrarComentario(msg, titulo);

        }
       
    }
    /* Enlace a Historial Clinica */

    private void VerDetalleAtencion(int? tipodgv)
    {
        try
        {
            //int index_dgvLHC = dgvListadoHistoriaClinica.FocusedRowIndex;
            //ASPxGridView dgvAtenciones = dgvListadoHistoriaClinica.FindDetailRowTemplateControl(index_dgvLHC, "dgvAtenciones") as ASPxGridView;
            //int index = dgvAtenciones.FocusedRowIndex;
            //if (index == -1)
            //{
            //    msg = "Debe Seleccionar Una Atencion.";
            //    MostrarComentario(msg);
            //    return;
            //}

            //int idAtencion = (Int32)Session["IdAtencion"];
            //CargaDetalleAtencion(idAtencion, tipodgv);
        }
        catch (Exception ex)
        {
            titulo = "ERROR AL MOSTRAR EL DETALLE DE LA ATENCION";
            msg = ex.Message;
            MostrarComentario(msg, titulo);
        }
    }

    private void CargaDetalleAtencion(int idAtencion, int? tipodgv)
    {
        try
        {
            LimpiardgvDiagnosticos(true);
            LimpiardgvExamenes(true);
            LimpiardgvHospitalizaciones(true);
            LimpiardgvMedicamentos(true);

            InterfaceRegistrarHistoriaClinica = new FacadeRegistrarHistoriaClinica();

            int? error = 0, vacio = null;
            switch (tipodgv)
            {
                case 0:
                    ListarDiagnosticos = new List<Object>();
                    ListarExamenes = new List<Object>();
                    ListarHospitalizaciones = new List<Object>();
                    ListarMedicamentos = new List<Object>();
                    ListarDiagnosticos = InterfaceRegistrarHistoriaClinica.listarDiagnosticos(idAtencion);
                    ListarExamenes = InterfaceRegistrarHistoriaClinica.listarExamenes(idAtencion);
                    ListarHospitalizaciones = InterfaceRegistrarHistoriaClinica.listarHospitalizaciones(idAtencion);
                    ListarMedicamentos = InterfaceRegistrarHistoriaClinica.listarMedicamentos(idAtencion);
                    break;
                case 1:
                    ListarDiagnosticos = new List<Object>();
                    ListarDiagnosticos = InterfaceRegistrarHistoriaClinica.listarDiagnosticos(idAtencion);
                    error = (ListarDiagnosticos == null || ListarDiagnosticos.Count() == 0) ? vacio : 0;
                    break;
                case 2:
                    ListarExamenes = new List<Object>();
                    ListarExamenes = InterfaceRegistrarHistoriaClinica.listarExamenes(idAtencion);
                    error = (ListarExamenes == null || ListarExamenes.Count() == 0) ? vacio : 0;
                    break;
                case 3:
                    ListarHospitalizaciones = new List<Object>();
                    ListarHospitalizaciones = InterfaceRegistrarHistoriaClinica.listarHospitalizaciones(idAtencion);
                    error = (ListarHospitalizaciones == null || ListarHospitalizaciones.Count() == 0) ? vacio : 0;
                    break;
                case 4:
                    ListarMedicamentos = new List<Object>();
                    ListarMedicamentos = InterfaceRegistrarHistoriaClinica.listarMedicamentos(idAtencion);
                    error = (ListarMedicamentos == null || ListarMedicamentos.Count() == 0) ? vacio : 0;
                    break;
                default:
                    error = null;
                    break;
            }
            if (error == null ||
                    (
                        (ListarDiagnosticos == null || ListarDiagnosticos.Count() == 0) &&
                        (ListarExamenes == null || ListarExamenes.Count() == 0) &&
                        (ListarHospitalizaciones == null || ListarHospitalizaciones.Count() == 0) &&
                        (ListarMedicamentos == null || ListarMedicamentos.Count() == 0)
                    )
                )
            {

                msg = "No Hay Datos Para La Atencion Solicitada.";
                //MostrarComentario(msg);
                //return;
            }

            switch (tipodgv)
            {
                case 0:
                    dgvDiagnosticos.DataSource = ListarDiagnosticos;
                    dgvDiagnosticos.DataBind();

                    dgvExamenes.DataSource = ListarExamenes;
                    dgvExamenes.DataBind();

                    dgvHospitalizaciones.DataSource = ListarHospitalizaciones;
                    dgvHospitalizaciones.DataBind();

                    dgvMedicamentos.DataSource = ListarMedicamentos;
                    dgvMedicamentos.DataBind();

                    break;
                case 1:
                    dgvDiagnosticos.DataSource = ListarDiagnosticos;
                    //dgvDiagnosticos.KeyFieldName = "ATE_ID_DIAGNOSTICO";
                    dgvDiagnosticos.DataBind();
                    break;
                case 2:
                    dgvExamenes.DataSource = ListarExamenes;
                    dgvExamenes.DataBind();
                    break;
                case 3:
                    dgvHospitalizaciones.DataSource = ListarHospitalizaciones;
                    dgvHospitalizaciones.DataBind();
                    break;
                case 4:
                    dgvMedicamentos.DataSource = ListarMedicamentos;
                    dgvMedicamentos.DataBind();
                    break;
                default:
                    error = null;
                    break;
            }

            //ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcDetalleAtencion.Show();", true);
        }
        catch (Exception ex)
        {
            titulo = "ERROR AL CARGAR EL DETALLE DE LA ATENCION";
            msg = ex.Message;
            MostrarComentario(msg, titulo);
        }
    }

    private void LimpiardgvDiagnosticos(Boolean estado)
    {
        dgvDiagnosticos.Visible = estado;
        dgvDiagnosticos.DataSource = null;
        dgvDiagnosticos.DataBind();
    }

    private void LimpiardgvExamenes(Boolean estado)
    {
        dgvExamenes.Visible = estado;
        dgvExamenes.DataSource = null;
        dgvExamenes.DataBind();
    }

    private void LimpiardgvHospitalizaciones(Boolean estado)
    {
        dgvHospitalizaciones.Visible = estado;
        dgvHospitalizaciones.DataSource = null;
        dgvHospitalizaciones.DataBind();
    }

    private void LimpiardgvMedicamentos(Boolean estado)
    {
        dgvMedicamentos.Visible = estado;
        dgvMedicamentos.DataSource = null;
        dgvMedicamentos.DataBind();
    }

    protected void dgvHospitalizaciones_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
    {
        VerDetalleAtencion(3);
    }

    protected void dgvHospitalizaciones_PageIndexChanged(object sender, EventArgs e)
    {
        VerDetalleAtencion(3);
    }

    protected void dgvMedicamentos_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
    {
        VerDetalleAtencion(4);
    }

    protected void dgvMedicamentos_PageIndexChanged(object sender, EventArgs e)
    {
        VerDetalleAtencion(4);
    }
    protected void dgvDiagnosticos_PageIndexChanged(object sender, EventArgs e)
    {
        VerDetalleAtencion(1);
    }

    protected void dgvDiagnosticos_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
    {
        VerDetalleAtencion(1);
    }

    protected void dgvExamenes_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
    {
        VerDetalleAtencion(2);
    }

    protected void dgvExamenes_PageIndexChanged(object sender, EventArgs e)
    {
        VerDetalleAtencion(2);
    }

    protected void DetalleDiagnostico(object sender, EventArgs e)
    {
        VerDetallePopUp(1);
    }

    protected void DetalleExamenes(object sender, EventArgs e)
    {
        VerDetallePopUp(2);
    }

    protected void DetalleHospitalizaciones(object sender, EventArgs e)
    {
        VerDetallePopUp(3);
    }

    protected void DetalleMedicamentos(object sender, EventArgs e)
    {
        VerDetallePopUp(4);
    }

    private void VerDetallePopUp(int tipo)
    {
        try
        {
            if (tipo == 0)
            {
                msg = "No Se Ha Seleccionado Ningun Registro de Ninguna Tabla.";
                //MostrarComentario(msg);
                return;
            }
            int index = 0;
            String cod = null, page = "";
            int id_atencion = 0;
            switch (tipo)
            {
                case 1:
                    index = dgvDiagnosticos.FocusedRowIndex;
                    cod = dgvDiagnosticos.GetRowValues(index, "ATD_ID_DIAGNOSTICO").ToString();
                    id_atencion = Convert.ToInt32((Int32)Session["IdAtencion"]);
                    page = "wfAtencion";
                    break;
                case 2:
                    index = dgvExamenes.FocusedRowIndex;
                    cod = dgvExamenes.GetRowValues(index, "ATE_ID_EXAMEN").ToString();
                    id_atencion = Convert.ToInt32((Int32)Session["IdAtencion"]);
                    page = "wfAtencion";
                    break;
                case 3:
                    index = dgvHospitalizaciones.FocusedRowIndex;
                    cod = dgvHospitalizaciones.GetRowValues(index, "REC_ID_RESERVACION_CAMAS").ToString();
                    id_atencion = Convert.ToInt32((Int32)Session["IdAtencion"]);
                    page = "wfAtencion";
                    break;
                case 4:
                    index = dgvMedicamentos.FocusedRowIndex;
                    cod = dgvMedicamentos.GetRowValues(index, "PRO_ID_PRODUCTO").ToString();
                    id_atencion = Convert.ToInt32((Int32)Session["IdAtencion"]);
                    page = "wfAtencion";
                    break;
            }

            if (cod == String.Empty)
            {
                msg = "No Existe Codigo Para El Registro Seleccionado";
                //MostrarComentario(msg);
                return;
            }

            Session["IdAtencion"] = id_atencion;
            Session["Ate_Operacion"] = "M";
            Session["Ate_Operacion2"] = "P";
            String ruta = String.Format("~/Clinica/{0}.aspx", page);
            Response.Redirect(ruta, true);
        }
        catch (Exception ex)
        {
            titulo = "ERROR AL MOSTRAR EL DETALLE CONSULTADO";
            msg = ex.Message;
            MostrarComentario(msg, titulo);
        }
    }
    protected void btnhistorial_Click(object sender, EventArgs e)
    {
        CargarAtenciones();
        ScriptManager.RegisterStartupScript(this, typeof(Page), "scriptkey", "pcDetalleAtencion.Show();", true);
        //VerDetalleAtencion(0);
    }
    public void CargarAtenciones() {
        gvatenciones.DataSource = objFacadeAtencion.ListarAtencionxpaciente(Convert.ToInt16(Session["CodPaciente"].ToString ()));
        gvatenciones.DataBind();        
    }
    protected void gvcitas_PageIndexChanged(object sender, EventArgs e)
    {
        listarCitas();
    }
    protected void gvcitas_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
    {
        listarCitas();
    }
    protected void btnaceptarcita_Click(object sender, EventArgs e)
    {
        CargarCita();
    }

    public void CargarCita() {
        try
        {
        int fila = gvcitas.FocusedRowIndex;
        int idAtencion = (int)gvcitas.GetRowValues(fila, "ATE_ID_ATENCION");
        txtidcita.Text = gvcitas.GetRowValues(fila, "CIT_ID_CITA").ToString();
        txtfeccita.Text = gvcitas.GetRowValues(fila, "CIT_FECHA").ToString();
        txthorcita.Text = gvcitas.GetRowValues(fila, "HOR_HORARIO").ToString();
        txtestado.Text = gvcitas.GetRowValues(fila, "ESC_DESCRIPCION").ToString();
        txtobs.Text = gvcitas.GetRowValues(fila, "CIT_OBSERVACION").ToString();
        Session["IdAtencion"] = idAtencion;
        Session["IdCita"] = txtidcita.Text;
        Session["Ate_Operacion"] = "M";
        Mostrar_Atencion(idAtencion);
        if (idAtencion.ToString()!="")
        {
            String atributo = "display";
            String valorAttr = "inline";
            btnhistorial.Visible = false;
            linkEnfermedadActual.Attributes.CssStyle.Add(atributo, valorAttr);
            linkHistoriaPersonal.Attributes.CssStyle.Add(atributo, valorAttr);
            linkHistoriaSocial.Attributes.CssStyle.Add(atributo, valorAttr);
            linkExamenEspecialidad.Attributes.CssStyle.Add(atributo, valorAttr);
            linkExamenActividad.Attributes.CssStyle.Add(atributo, valorAttr);
            linkDiagnostico.Attributes.CssStyle.Add(atributo, valorAttr);
            btnhistorial.Visible = true;
            valorOperacion = "M";
        }

        }
        catch {
        
        }
    }
    protected void gvcitas_CustomButtonCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewCustomButtonCallbackEventArgs e)
    {

        int codigo = Convert.ToInt16(gvcitas.GetRowValues(e.VisibleIndex, "CIT_ID_CITA"));

        if (objFacadeAtencion.ActualizarEstadoCita(codigo, 4)) {
            listarCitas();
            titulo = "Mensaje";
            msg = "La cita paso ha estado A postergar";
            MostrarComentario(msg, titulo);
        }
    }
    protected void btnvercita_Click(object sender, EventArgs e)
    {

    }
    protected void btnverhist_Click(object sender, EventArgs e)
    {
        try {
            Page.MaintainScrollPositionOnPostBack = false;
        int ind = Convert.ToInt16(gvatenciones.GetRowValues(gvatenciones.FocusedRowIndex, "ATE_ID_ATENCION"));
        int idAtencion = ind;
        CargaDetalleAtencion(idAtencion, 0);

        }
        catch(Exception ex)
        {
            titulo = "Mensaje";
            msg = "Debe seleccionar una atencion para ver el detalle del Historial";
            MostrarComentario(msg, titulo);
        }
    }
    protected void gvatenciones_PageIndexChanged(object sender, EventArgs e)
    {
        CargarAtenciones();
    }
}